<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        //写一个sum方法，当使用下面方法调用可以正常工作
        console.log(sum(2, 3)); ///output 5
        console.log(sum(2)(3)); //output 5

        // 有(至少) 两种方法可以做到这一点:
        //     METHOD 1

        // function sum(x) {
        //     if (arguments.length == 2) {
        //         return arguments[0] + arguments[1];
        //     } else {
        //         return function (y) {
        //             return x + y;
        //         };
        //         在JavaScript中， 函数提供对参数对象的访问， 该对象提供对
        //         传递给函数的实际参数的访问。 这使我们能够使用length属
        //         性在运行时确定传递给函数的参数的数量
        //         如果传递两个参数， 我们只需将它们相加并返回。
        //         否则， 我们假设它是以sum(2)(3) 的形式被调用的， 所以我们
        //         返回 - -个匿名函数， 它将传递给sum()(在本例中为2) 的参数。
        //         和传递给匿名函数的参数(这种情况3)。
        //         METHOD 2

        //         function sum(x, y) {
        //             if (y !== undefined) {
        //                 returnx + y;
        //             } else {
        //                 return function (y) {
        //                     return X + y;
        //                 };
        //                 当函数被调用时， JavaScript不需要参数的数量来匹配函数定
        //                 义中参数的数量。 如果传递的参数数量超过了函数定义中参
        //                 数的数量， 则超出的参数将被忽略。 另一方面， 如果传递的
        //                 参数数量少于函数定义中的参数数量, 则在函数内引用时,
        //                 缺少的参数将具有未定义的值。 因此, 在上面的例子中， 通
        //                 过简单地检查第二个参数是否未定义， 我们可以确定函数被
        //                 调用的方式并相应地继续。
    </script>
</body>

</html>